package Operation;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class DBUtil {
    //设置URL
    private static final String URL="jdbc:mysql://127.0.0.1:3306/BMS?characterEncoding=utf8&useSSL=false";
    //数据库用户名
    private static  final String USERNAME="root";
    //数据库密码
    private  static  final String PASSWORD="991218zf";
    //1、创建DataSource实例
    //加上static之后，DataSource就变成了类属性。和实例无关，只和类相关。
    //类属性，就是在类被创建出来的时候，才会被创建。
    //啥时候创建类？ 类加载阶段，但对于类来说，一个类也只是被加载一次而已。
    // 实例属性是在每个实例被创建出来的时候都会被创建
    private static DataSource dataSource=new MysqlDataSource();
    //使用一个构造方法，来设置Datasource进行属性，行不行?  不行。构造方法就需要实例对象了，但我们不想要这样
    //静态代码块
    static {
        ((MysqlDataSource)dataSource).setUrl (URL);
        ((MysqlDataSource)dataSource).setUser (USERNAME);
        ((MysqlDataSource)dataSource).setPassword (PASSWORD);
    }
    //提供一个方法来建立链接
    //这个方法也设计成static，这样不用创建DBUtil实例，也能调用这个方法
    public static Connection getConnection() throws SQLException {
        return  dataSource.getConnection ();
    }
    //释放资源
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet)  {
        if(resultSet!=null){
            try {
                resultSet.close ();
            }catch (SQLException e){
                e.printStackTrace ();
            }
        }
        if(statement!=null){
            try {
                statement.close ();
            }catch (SQLException e){
                e.printStackTrace ();
            }
        }
        if(connection!=null){
            try {
                connection.close ();
            }catch (SQLException e){
                e.printStackTrace ();
            }
        }
    }


}
